// body-parser处理json数据、Buffer流数据、文本数据、UTF-8的编码的数据。
const bodyParser = require('body-parser')
const express=require('express')
const app=express()
const path=require('path')


// 导入定义验证规则的包
const Joi=require('joi')

//配置cors中间件（跨域）
const cors=require('cors')
app.use(cors())
app.use(express.json());

// app.use(express.static(path.join(__dirname,'public')))

//配置解析表单数据的中间件，注意：这个中间件，只能解析 application/x-www-form-urlencoded 格式的表单数据
app.use(express.urlencoded({extended:false}))

// 一定要在路由之前，封装res.cc函数
app.use((req,res,next)=>{
    // status 默认值为1，表示失败的情况
    // err 的值，可能是一个错误对象，也可能是一个错误的字符串
    res.cc=function(err,status=1){
        res.send({
            status,
            message:err instanceof Error ? err.message:err
        })
    }
    next()
})



// 前端数据
// 新闻信息
const webNewRoter=require('./router/web/new.js')
app.use('/webapi/new',webNewRoter)

// 产品信息
const webProductRouter=require('./router/web/product.js')
app.use('/webapi/product',webProductRouter)

// 企业信息
const webCompanyRouter=require('./router/web/company.js')
app.use('/webapi/company',webCompanyRouter)

// 轮播图
const webCarouselRouter=require('./router/web/carousel.js')
app.use('/webapi/carousel',webCarouselRouter)

// 企业合作
const webCooperationRouter=require('./router/web/cooperation.js')
app.use('/webapi/cooperation',webCooperationRouter)

// 留言反馈
// 
// /adminapi/feedback/addFeedback
const webFeedbackRouter=require('./router/web/feedback.js')
app.use('/webapi/feedback',webFeedbackRouter)



// 一定要在路由之前配置解析Token的中间件
const expressJWT=require('express-jwt')
const config=require('./config')

app.use(expressJWT({secret:config.jwtSecretKey}).unless({path:[/^\/adminapi/,/^\/webapi\/feedback/]}))


// 后台数据
//导入并使用用户路由模块
// 用户
const userRouter=require('./router/user.js')
app.use('/adminapi/user',userRouter)

//导入并使用新闻路由模块
// 新闻
const newRouter=require('./router/new.js')
app.use('/adminapi/new',newRouter)

// 导入并使用产品路由模块
// 产品
const productRouter=require('./router/product.js')
app.use('/adminapi/product',productRouter)

// 企业
const companyRouter=require('./router/company.js')
app.use('/adminapi/company',companyRouter)

// 轮播图
const carouselRouter=require('./router/carousel.js')
app.use('/adminapi/carousel',carouselRouter)

// 合作企业
const cooperationRouter=require('./router/cooperation.js')
app.use('/adminapi/cooperation',cooperationRouter)

// 留言反馈
const feedbackRouter=require('./router/feedback.js')
app.use('/adminapi/feedback',feedbackRouter)


// 上传图片
// 设置存储配置
// const multer = require('multer');
// const router=express.Router()
// const upload = multer({ dest: 'uploads/' });
// const storage = multer.diskStorage({
    // destination: function (req, file, cb) {
        // cb(null, path.resolve(__dirname, './public/images'));
    // },
    // filename: function (req, file, cb) {
        // cb(null, `${Date.now()}_${Math.ceil(Math.random() * 1000)}_multer.${file.originalname.split('.').pop()}`);
    // }
// })


// const uploadCfg = {
    // storage: storage,
    // limits: {
        // 上传文件的大小限制,单位bytes    
        // fileSize: 1024 * 1024 * 2
    // }
// };

// router.post("/upload", async (req, res) => {
    // let upload = multer(uploadCfg).any();
    // upload(req, res, async (err) => {
        // const {url,school_id} = req.body
        // let uploadFile = req.files[0];
        // console.log("body",req.body);
        // console.log(req);
        // if (err) {
            // res.json({
            //   path: `/public/images/${uploadFile.filename}`
            // });
            // console.log(err);
            // return;
        //   };

        //   let data =await School.update({
            // background: url+`/public/images/${uploadFile.filename}`
        //   },{
            // where:{
                // school_id:school_id
            // }
        //   })
    // })
// })


// 定义错误级别的中间件
app.use((err,req,res,next)=>{
    // 验证失败导致的错误
    if(err instanceof Joi.ValidationError) return res.cc(err)
    // 身份认证失败后的错误
    if(err.name==='UnauthorizedError') return res.cc('身份认证失败')
    // 未知的错误
    res.cc(err)
})

// 处理application/json内容格式的请求体
app.use(bodyParser.json());
// 处理application/x-www-form-urlencoded内容格式的请求体
app.use(bodyParser.urlencoded({extended: false}));



app.listen(3007,()=>{
    console.log("http://127.0.0.1:3007");
})

